package com.socialsoftware.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.text.TextUtils;

/**
 * 头像工具类
 * 用于生成圆形头像和文字头像
 */
public class AvatarUtil {

    // 默认颜色集合 - 品牌色调，看起来更专业
    private static final int[] DEFAULT_COLORS = {
        Color.parseColor("#07C160"), // 微信绿
        Color.parseColor("#1F87FB"), // 蓝色
        Color.parseColor("#FA5151"), // 红色
        Color.parseColor("#FFC300"), // 金色
        Color.parseColor("#9966CC"), // 紫色
        Color.parseColor("#FF8C00"), // 深橙色
        Color.parseColor("#00CED1"), // 青色
        Color.parseColor("#1E90FF"), // 道奇蓝
        Color.parseColor("#FF69B4"), // 粉红色
        Color.parseColor("#32CD32")  // 酸橙绿
    };

    /**
     * 生成文字头像
     * @param context 上下文
     * @param text 显示的文字（通常是联系人名称的首字母）
     * @param backgroundColor 背景颜色
     * @param textColor 文字颜色
     * @return 包含文字的圆形头像Drawable
     */
    public static Drawable getTextAvatar(Context context, String text, int backgroundColor, int textColor) {
        if (text == null || text.isEmpty()) {
            text = "?";
        }
        
        // 只取第一个字符，对于中文也适用
        text = text.substring(0, 1).toUpperCase();
        
        int size = 240; // 高清头像尺寸
        Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        
        // 绘制圆形背景
        Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        backgroundPaint.setColor(backgroundColor);
        canvas.drawCircle(size / 2f, size / 2f, size / 2f, backgroundPaint);
        
        // 绘制文字
        Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setColor(textColor);
        textPaint.setTextSize(size / 2.5f); // 稍微小一点，更美观
        textPaint.setTextAlign(Paint.Align.CENTER);
        textPaint.setFakeBoldText(true); // 加粗更清晰
        
        // 计算文字位置以垂直居中
        Rect textBounds = new Rect();
        textPaint.getTextBounds(text, 0, text.length(), textBounds);
        float textHeight = textBounds.height();
        float textBaseY = size / 2f + textHeight / 2f - textBounds.bottom;
        
        // 绘制文字（垂直居中）
        canvas.drawText(text, size / 2f, textBaseY, textPaint);
        
        return new BitmapDrawable(context.getResources(), bitmap);
    }
    
    /**
     * 根据联系人名称生成随机颜色的头像
     * @param context 上下文
     * @param name 联系人名称
     * @return 头像Drawable
     */
    public static Drawable getNameAvatar(Context context, String name) {
        if (TextUtils.isEmpty(name)) {
            name = "?";
        }
        
        // 根据名称生成一个固定的颜色（相同名称总是相同颜色）
        int hash = name.hashCode();
        int colorIndex = Math.abs(hash) % DEFAULT_COLORS.length;
        int backgroundColor = DEFAULT_COLORS[colorIndex];
        
        // 为中文生成首字符头像，为英文生成首字母头像
        String initial;
        if (name.matches("^[\u4e00-\u9fa5].*")) {
            // 中文取第一个字
            initial = name.substring(0, 1);
        } else {
            // 英文取首字母大写
            initial = String.valueOf(Character.toUpperCase(name.charAt(0)));
        }
        
        return getTextAvatar(context, initial, backgroundColor, Color.WHITE);
    }
    
    /**
     * 获取渐变背景的头像（更专业的效果）
     * @param context 上下文
     * @param name 联系人名称
     * @return 渐变背景头像Drawable
     */
    public static Drawable getGradientAvatar(Context context, String name) {
        if (TextUtils.isEmpty(name)) {
            name = "?";
        }
        
        // 根据名称生成固定颜色
        int hash = name.hashCode();
        int primaryColorIndex = Math.abs(hash) % DEFAULT_COLORS.length;
        int secondaryColorIndex = (primaryColorIndex + 3) % DEFAULT_COLORS.length; // 取互补色
        
        int startColor = DEFAULT_COLORS[primaryColorIndex];
        int endColor = DEFAULT_COLORS[secondaryColorIndex];
        
        // 创建渐变背景
        GradientDrawable gradientDrawable = new GradientDrawable(
                GradientDrawable.Orientation.TL_BR, // 从左上到右下
                new int[] {startColor, endColor});
        gradientDrawable.setShape(GradientDrawable.OVAL);
        
        // 创建位图
        int size = 240;
        Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        
        // 绘制渐变背景
        gradientDrawable.setBounds(0, 0, size, size);
        gradientDrawable.draw(canvas);
        
        // 绘制文字
        String initial;
        if (name.matches("^[\u4e00-\u9fa5].*")) {
            // 中文取第一个字
            initial = name.substring(0, 1);
        } else {
            // 英文取首字母大写
            initial = String.valueOf(Character.toUpperCase(name.charAt(0)));
        }
        
        Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setColor(Color.WHITE);
        textPaint.setTextSize(size / 2.5f);
        textPaint.setTextAlign(Paint.Align.CENTER);
        textPaint.setFakeBoldText(true);
        
        // 计算文字位置
        Rect textBounds = new Rect();
        textPaint.getTextBounds(initial, 0, initial.length(), textBounds);
        float textHeight = textBounds.height();
        float textBaseY = size / 2f + textHeight / 2f - textBounds.bottom;
        
        // 绘制文字
        canvas.drawText(initial, size / 2f, textBaseY, textPaint);
        
        return new BitmapDrawable(context.getResources(), bitmap);
    }
} 